/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle.gui.frames.internos;

import controle.gui.utils.ApagaElementosDaInterface;
import controle.gui.utils.EnabledGUIElements;
import controle.utils.Datas;
import gui.componentes.RendererTable;
import gui.frames.internos.IFVisitaBoletinsPendentes;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import modelo.Boletimpesquisa;
import modelo.Quadra;
import modelo.Visitapesquisa;
import persistencia.dao.AbstractDAO;

/**
 *
 * @author Nero
 */
public class ControleVisitaBoletinsPendentes extends ControleVisitaPesquisa {

    private IFVisitaBoletinsPendentes frame;
    private ControleBoletinsPendentes controleBoletim;
    protected Integer linhaSelecionadaBoletim;

    public ControleVisitaBoletinsPendentes(IFVisitaBoletinsPendentes frame, ControleBoletinsPendentes controleBoletim) {
        super(frame);
        this.frame = frame;
        this.controleBoletim = controleBoletim;
        this.linhaSelecionadaBoletim = -1;
        this.linhaSelecionadaVisitas = -1;
    }

    @Override
    public void inicializa() {
        frame.setVisible(true);
        frame.buttonLimpar.setText("Limpar");
        inicializaEventosJTextFieldsLarvas(frame);
    }

    @Override
    public void guiAtiva(boolean estado) {

        EnabledGUIElements.disabledJComponent(frame.comboQuadra, frame.comboTipoUnidade, frame.textDepInsp, frame.checkUltimaVisitaBoletim, frame.checkQuartConcluido,
                frame.comboImovel, frame.comboLogradouro, frame.textTubitos, frame.textAmostra, frame.textAegTotal, frame.textAlbTotal);
        EnabledGUIElements.enabledJComponent(frame.textAegA, frame.textAegB, frame.textAegC, frame.textAegD, frame.textAegE,
                frame.textAegF, frame.textAegG, frame.textAegH, frame.textAegI, frame.textAlbA, frame.textAlbB, frame.textAlbC,
                frame.textAlbD, frame.textAlbE, frame.textAlbF, frame.textAlbG, frame.textAlbH, frame.textAlbI, frame.textOutTotal);
    }

    @Override
    public void preencheGUI() {

        //Captura a linha selecionada nas tabelas
        linhaSelecionadaBoletim = controleBoletim.frame.tabela.getSelectedRow();
        linhaSelecionadaVisitas = controleBoletim.frame.tabelaVisitas.getSelectedRow();

        DefaultTableModel modelo = (DefaultTableModel) controleBoletim.frame.tabela.getModel();
        DefaultTableModel modeloVisitas = (DefaultTableModel) controleBoletim.frame.tabelaVisitas.getModel();

        Visitapesquisa visita = null;

        //Captura a visita na HashSet de visitas do boletim
        List<Visitapesquisa> list = new ArrayList<Visitapesquisa>((Set<Visitapesquisa>) controleBoletim.setVisitas);
        for (int index = 0; index < list.size(); index++) {
            if (modeloVisitas.getValueAt(linhaSelecionadaVisitas, 0) != null && list.get(index).getIdVisitaPesquisa() != null) {
                if (list.get(index).getIdVisitaPesquisa().equals(Integer.parseInt(modeloVisitas.getValueAt(linhaSelecionadaVisitas, 0).toString()))) {
                    visita = list.get(index);
                    break;
                } else {
                    visita = null;
                }
            } else if (!modeloVisitas.getValueAt(linhaSelecionadaVisitas, 1).toString().isEmpty() && list.get(index).getHora() != null) {
                if (modeloVisitas.getValueAt(linhaSelecionadaVisitas, 1).toString().equals(list.get(index).getHora().toString())) {
                    visita = list.get(index);
                    break;
                } else {
                    visita = null;
                }
            }
        }

        if (visita != null) {
            this.guiAtiva(false);

            //Preenche os elementos da GUI
            System.out.println("linhaSelecionadaBoletim=" + linhaSelecionadaBoletim);
            if (modelo.getValueAt(linhaSelecionadaBoletim, 0) != null) {
                frame.textIdBoletim.setText(modelo.getValueAt(linhaSelecionadaBoletim, 0).toString());
            }
            if (modeloVisitas.getValueAt(linhaSelecionadaVisitas, 0) != null) {
                frame.textIdVisita.setText(modeloVisitas.getValueAt(linhaSelecionadaVisitas, 0).toString());
            }
            String complemento = "";
            if (visita.getImovel().getComplemento() != null) {
                complemento = visita.getImovel().getComplemento();
            }

            //Carrega o combo dos models
            frame.comboQuadra.setModel(new javax.swing.DefaultComboBoxModel(new String[]{visita.getQuadra().getCodigo().toString()}));
            frame.comboLogradouro.setModel(new javax.swing.DefaultComboBoxModel(new String[]{visita.getLogradouro().getNome()}));
            frame.comboImovel.setModel(new javax.swing.DefaultComboBoxModel(new String[]{visita.getImovel().getNumero() + " - " + complemento}));
            frame.textHora.setText(visita.getHora().toString());
            frame.textCodigoQuadra.setText(visita.getQuadra().getIdQuadra().toString());
            frame.textIdLogradouro.setText(visita.getLogradouro().getIdLogradouro() + "");
            frame.textIdImovel.setText(visita.getImovel().getIdImovel().toString());
            frame.comboTipoUnidade.setSelectedItem(visita.getTipoUnidade());
            frame.textAegTotal.setText(visita.getLarvasAeg() != null ? visita.getLarvasAeg().toString() : "");
            frame.textAlbTotal.setText(visita.getLarvasAlb() != null ? visita.getLarvasAlb().toString() : "");
            frame.textOutTotal.setText(visita.getLarvasOut() != null ? visita.getLarvasOut().toString() : "");
            frame.textDepInsp.setText(visita.getDepositosInspecionados().toString());
            frame.textAmostra.setText(visita.getNumeroAmostra() != null ? visita.getNumeroAmostra().toString() : "");
            frame.textTubitos.setText(visita.getNumeroTubitos() != null ? visita.getNumeroTubitos().toString() : "");
            frame.checkUltimaVisitaBoletim.setSelected(visita.isUltimaVisitaBoletim());
            frame.checkQuartConcluido.setSelected(visita.isQuadraConcluida());

            this.preencheGuiVisitaDeposito(visita, frame);

        }
    }

    @Override
    public void limparGUI() {
        new ApagaElementosDaInterface().apagaJTextField(frame.textAegTotal, frame.textAlbTotal, frame.textOutTotal, 
                frame.textAegA, frame.textAegB, frame.textAegC, frame.textAegD, frame.textAegE, frame.textAegF, frame.textAegG, frame.textAegH, frame.textAegI,
                frame.textAlbA, frame.textAlbB, frame.textAlbC, frame.textAlbD, frame.textAlbE, frame.textAlbF, frame.textAlbG, frame.textAlbH, frame.textAlbI);
    }

    @Override
    public void inserirAlterarLinha() {

        DefaultTableModel modeloVisitas = (DefaultTableModel) controleBoletim.frame.tabelaVisitas.getModel();

        //Cria um boletim na memória a partir do Iframe 
        Boletimpesquisa boletim = controleBoletim.criaBoletim(JOptionPane.YES_OPTION);

        //Captura o objeto
        Visitapesquisa visita = this.criaVisita(frame, boletim);

        if (visita != null) {

            //Percorre todas as linhas da tabela de visitas procurando pela visita com mesmo Id da visita alterada
            for (int index = 0; index < modeloVisitas.getRowCount(); index++) {
                if (visita.getIdVisitaPesquisa().equals(Integer.parseInt(modeloVisitas.getValueAt(index, 0).toString()))) {
                    //Altera os atributos da linha
                    modeloVisitas.setValueAt(visita.getLarvasAeg(), index, 8);
                    modeloVisitas.setValueAt(visita.getLarvasAlb(), index, 9);
                    modeloVisitas.setValueAt(visita.getLarvasOut(), index, 10);

                }
            }

            //Altera a visita no objeto
            List<Visitapesquisa> list = new ArrayList<Visitapesquisa>(controleBoletim.setVisitas);
            list.set(linhaSelecionadaVisitas, visita);
            controleBoletim.setVisitas = new TreeSet<Visitapesquisa>(list);

            frame.dispose();
        }
    }

    public void listarPesquisaNaTabela(List<Boletimpesquisa> list, JTable tabela) {

        tabela.getColumnModel().getColumn(0).setMinWidth(30);
        tabela.getColumnModel().getColumn(1).setMinWidth(60);
        tabela.getColumnModel().getColumn(2).setMinWidth(200);
        tabela.getColumnModel().getColumn(3).setMinWidth(300);
        tabela.getColumnModel().getColumn(4).setMinWidth(200);

        DefaultTableModel modelo = (DefaultTableModel) tabela.getModel();
        modelo.setNumRows(0);

        //Inicializa o DefaultTableCellRender modificado para personalizar algumas células
        DefaultTableCellRenderer renderer = new RendererTable(list);

        if (list != null) {
            try {
                for (int i = 0; i < list.size(); i++) {
                    Boletimpesquisa boletim = list.get(i);
                    //AbstractDAO.inicializaSessao();
                    modelo.addRow(new Object[]{boletim.getIdBoletimPesquisa(), Datas.toString(boletim.getData()), boletim.getMunicipio().getNome(),
                                boletim.getLocalidade().getNome(), boletim.getAgente().getNome()});
                    AbstractDAO.fechaSessao();

                    //Altera as propriedades das células desta linha de acordo com o estado de conclusão da transação atual*
                    tabela.getColumnModel().getColumn(0).setCellRenderer(renderer);
                    tabela.getColumnModel().getColumn(1).setCellRenderer(renderer);
                    tabela.getColumnModel().getColumn(2).setCellRenderer(renderer);
                    tabela.getColumnModel().getColumn(3).setCellRenderer(renderer);
                    tabela.getColumnModel().getColumn(4).setCellRenderer(renderer);
                }

            } catch (Exception er) {
                JOptionPane.showMessageDialog(frame, "Erro ao listar os objetos na tabela!\n\n" + er, "Erro na listagem!", JOptionPane.ERROR_MESSAGE);
                er.printStackTrace();
            }
        }

    }
    
    @Override
    protected boolean verificaQuadraConcluida(TreeSet setVisitas, Quadra quadraConsultada, Integer idVisitaAtual) {
        return false;
    }
}
